<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/page-flags-layout.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/page-flags-layout.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_UEFHRV9GTEFHU19MQVlPVVRfSF8w"><span class="b">PAGE_FLAGS_LAYOUT_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_UEFHRV9GTEFHU19MQVlPVVRfSF8w"><span class="b">PAGE_FLAGS_LAYOUT_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">numa</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">generated</span><span class="f">/</span><span class="b">bounds</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="Maybe">       6:</span> 
<a name="7" /><span class="Maybe">       7:</span> <span class="k">/*</span>
<a name="8" /><span class="Maybe">       8:</span> <span class="k"> * When a memory allocation must conform to specific limitations (such</span>
<a name="9" /><span class="Maybe">       9:</span> <span class="k"> * as being suitable for DMA) the caller will pass in hints to the</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="k"> * allocator in the gfp_mask, in the zone modifier bits.  These bits</span>
<a name="11" /><span class="Maybe">      11:</span> <span class="k"> * are used to select a priority ordered list of memory zones which</span>
<a name="12" /><span class="Maybe">      12:</span> <span class="k"> * match the requested limits. See gfp_zone() in include/linux/gfp.h</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="k"> */</span>
<a name="14" /><span class="False">      14:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_TUFYX05SX1pPTkVTXzA_"><span class="b">MAX_NR_ZONES</span></a> <span class="f">&lt;</span> <span class="c">2</span>
<a name="15" /><span class="False">      15:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Wk9ORVNfU0hJRlRfMA__"><span class="b">ZONES_SHIFT</span></a> <span class="c">0</span>
<a name="16" /><span class="False">      16:</span> <span class="f">#</span><span class="n">elif</span> <a href="cpu.c_macros_ref.html#_TUFYX05SX1pPTkVTXzA_"><span class="b">MAX_NR_ZONES</span></a> <span class="f">&lt;=</span> <span class="c">2</span>
<a name="17" /><span class="False">      17:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Wk9ORVNfU0hJRlRfMA__"><span class="b">ZONES_SHIFT</span></a> <span class="c">1</span>
<a name="18" /><span class="Maybe">      18:</span> <span class="f">#</span><span class="n">elif</span> <a href="cpu.c_macros_ref.html#_TUFYX05SX1pPTkVTXzA_"><span class="b">MAX_NR_ZONES</span></a> <span class="f">&lt;=</span> <span class="c">4</span>
<a name="19" /><span class="Maybe">      19:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Wk9ORVNfU0hJRlRfMA__"><span class="b">ZONES_SHIFT</span></a> <span class="c">2</span>
<a name="20" /><span class="False">      20:</span> <span class="f">#</span><span class="n">else</span>
<a name="21" /><span class="False">      21:</span> <span class="f">#</span><span class="n">error</span> <a href="cpu.c_macros_ref.html#_Wk9ORVNfU0hJRlRfMA__"><span class="b">ZONES_SHIFT</span></a> <span class="f">--</span> <span class="b">too</span> <span class="b">many</span> <span class="b">zones</span> <span class="b">configured</span> <span class="b">adjust</span> <span class="b">calculation</span>
<a name="22" /><span class="Maybe">      22:</span> <span class="f">#</span><span class="n">endif</span>
<a name="23" /><span class="Maybe">      23:</span> 
<a name="24" /><span class="Maybe">      24:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NQQVJTRU1FTV8w"><span class="b">CONFIG_SPARSEMEM</span></a>
<a name="25" /><span class="Maybe">      25:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">sparsemem</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="26" /><span class="Maybe">      26:</span> 
<a name="27" /><span class="Maybe">      27:</span> <span class="k">/* SECTION_SHIFT    #bits space required to store a section # */</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_U0VDVElPTlNfU0hJRlRfMA__"><span class="b">SECTIONS_SHIFT</span></a>    <span class="f">(</span><a href="cpu.c_macros_ref.html#_TUFYX1BIWVNNRU1fQklUU18w"><span class="b">MAX_PHYSMEM_BITS</span></a> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_U0VDVElPTl9TSVpFX0JJVFNfMA__"><span class="b">SECTION_SIZE_BITS</span></a><span class="f">)</span>
<a name="29" /><span class="Maybe">      29:</span> 
<a name="30" /><span class="Maybe">      30:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_SPARSEMEM */</span>
<a name="31" /><span class="Maybe">      31:</span> 
<a name="32" /><span class="Maybe">      32:</span> <span class="k">/*</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k"> * page-&gt;flags layout:</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="k"> *</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="k"> * There are five possibilities for how page-&gt;flags get laid out.  The first</span>
<a name="36" /><span class="Maybe">      36:</span> <span class="k"> * pair is for the normal case without sparsemem. The second pair is for</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="k"> * sparsemem when there is plenty of space for node and section information.</span>
<a name="38" /><span class="Maybe">      38:</span> <span class="k"> * The last is when there is insufficient space in page-&gt;flags and a separate</span>
<a name="39" /><span class="Maybe">      39:</span> <span class="k"> * lookup is necessary.</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="k"> *</span>
<a name="41" /><span class="Maybe">      41:</span> <span class="k"> * No sparsemem or sparsemem vmemmap: |       NODE     | ZONE |             ... | FLAGS |</span>
<a name="42" /><span class="Maybe">      42:</span> <span class="k"> *      &quot; plus space for last_cpupid: |       NODE     | ZONE | LAST_CPUPID ... | FLAGS |</span>
<a name="43" /><span class="Maybe">      43:</span> <span class="k"> * classic sparse with space for node:| SECTION | NODE | ZONE |             ... | FLAGS |</span>
<a name="44" /><span class="Maybe">      44:</span> <span class="k"> *      &quot; plus space for last_cpupid: | SECTION | NODE | ZONE | LAST_CPUPID ... | FLAGS |</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="k"> * classic sparse no space for node:  | SECTION |     ZONE    | ... | FLAGS |</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="k"> */</span>
<a name="47" /><span class="False">      47:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1NQQVJTRU1FTV8w"><span class="b">CONFIG_SPARSEMEM</span></a><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXzA_"><span class="b">CONFIG_SPARSEMEM_VMEMMAP</span></a><span class="f">)</span>
<a name="48" /><span class="False">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_U0VDVElPTlNfV0lEVEhfMA__"><span class="b">SECTIONS_WIDTH</span></a>        <a href="cpu.c_macros_ref.html#_U0VDVElPTlNfU0hJRlRfMA__"><span class="b">SECTIONS_SHIFT</span></a>
<a name="49" /><span class="Maybe">      49:</span> <span class="f">#</span><span class="n">else</span>
<a name="50" /><span class="Maybe">      50:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_U0VDVElPTlNfV0lEVEhfMA__"><span class="b">SECTIONS_WIDTH</span></a>        <span class="c">0</span>
<a name="51" /><span class="Maybe">      51:</span> <span class="f">#</span><span class="n">endif</span>
<a name="52" /><span class="Maybe">      52:</span> 
<a name="53" /><span class="Maybe">      53:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Wk9ORVNfV0lEVEhfMA__"><span class="b">ZONES_WIDTH</span></a>        <a href="cpu.c_macros_ref.html#_Wk9ORVNfU0hJRlRfMA__"><span class="b">ZONES_SHIFT</span></a>
<a name="54" /><span class="Maybe">      54:</span> 
<a name="55" /><span class="Maybe">      55:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_U0VDVElPTlNfV0lEVEhfMA__"><span class="b">SECTIONS_WIDTH</span></a><span class="f">+</span><a href="cpu.c_macros_ref.html#_Wk9ORVNfV0lEVEhfMA__"><span class="b">ZONES_WIDTH</span></a><span class="f">+</span><a href="cpu.c_macros_ref.html#_Tk9ERVNfU0hJRlRfMA__"><span class="b">NODES_SHIFT</span></a> <span class="f">&lt;=</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_TlJfUEFHRUZMQUdTXzA_"><span class="b">NR_PAGEFLAGS</span></a>
<a name="56" /><span class="Maybe">      56:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Tk9ERVNfV0lEVEhfMA__"><span class="b">NODES_WIDTH</span></a>        <a href="cpu.c_macros_ref.html#_Tk9ERVNfU0hJRlRfMA__"><span class="b">NODES_SHIFT</span></a>
<a name="57" /><span class="False">      57:</span> <span class="f">#</span><span class="n">else</span>
<a name="58" /><span class="False">      58:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXzA_"><span class="b">CONFIG_SPARSEMEM_VMEMMAP</span></a>
<a name="59" /><span class="False">      59:</span> <span class="f">#</span><span class="n">error</span> <span class="e">&quot;Vmemmap: No space for nodes field in page flags&quot;</span>
<a name="60" /><span class="False">      60:</span> <span class="f">#</span><span class="n">endif</span>
<a name="61" /><span class="False">      61:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Tk9ERVNfV0lEVEhfMA__"><span class="b">NODES_WIDTH</span></a>        <span class="c">0</span>
<a name="62" /><span class="Maybe">      62:</span> <span class="f">#</span><span class="n">endif</span>
<a name="63" /><span class="Maybe">      63:</span> 
<a name="64" /><span class="False">      64:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_NUMA_BALANCING</span>
<a name="65" /><span class="False">      65:</span> <span class="f">#</span><span class="n">define</span> <span class="b">LAST__PID_SHIFT</span> <span class="c">8</span>
<a name="66" /><span class="False">      66:</span> <span class="f">#</span><span class="n">define</span> <span class="b">LAST__PID_MASK</span>  <span class="f">(</span><span class="f">(</span><span class="c">1</span> <span class="f">&lt;&lt;</span> <span class="b">LAST__PID_SHIFT</span><span class="f">)</span><span class="f">-</span><span class="c">1</span><span class="f">)</span>
<a name="67" /><span class="False">      67:</span> 
<a name="68" /><span class="False">      68:</span> <span class="f">#</span><span class="n">define</span> <span class="b">LAST__CPU_SHIFT</span> <a href="cpu.c_macros_noref.html#_TlJfQ1BVU19CSVRTXzA_"><span class="b">NR_CPUS_BITS</span></a>
<a name="69" /><span class="False">      69:</span> <span class="f">#</span><span class="n">define</span> <span class="b">LAST__CPU_MASK</span>  <span class="f">(</span><span class="f">(</span><span class="c">1</span> <span class="f">&lt;&lt;</span> <span class="b">LAST__CPU_SHIFT</span><span class="f">)</span><span class="f">-</span><span class="c">1</span><span class="f">)</span>
<a name="70" /><span class="False">      70:</span> 
<a name="71" /><span class="False">      71:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfU0hJRlRfMA__"><span class="b">LAST_CPUPID_SHIFT</span></a> <span class="f">(</span><span class="b">LAST__PID_SHIFT</span><span class="f">+</span><span class="b">LAST__CPU_SHIFT</span><span class="f">)</span>
<a name="72" /><span class="Maybe">      72:</span> <span class="f">#</span><span class="n">else</span>
<a name="73" /><span class="Maybe">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfU0hJRlRfMA__"><span class="b">LAST_CPUPID_SHIFT</span></a> <span class="c">0</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="f">#</span><span class="n">endif</span>
<a name="75" /><span class="Maybe">      75:</span> 
<a name="76" /><span class="Maybe">      76:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_U0VDVElPTlNfV0lEVEhfMA__"><span class="b">SECTIONS_WIDTH</span></a><span class="f">+</span><a href="cpu.c_macros_ref.html#_Wk9ORVNfV0lEVEhfMA__"><span class="b">ZONES_WIDTH</span></a><span class="f">+</span><a href="cpu.c_macros_ref.html#_Tk9ERVNfU0hJRlRfMA__"><span class="b">NODES_SHIFT</span></a><span class="f">+</span><a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfU0hJRlRfMA__"><span class="b">LAST_CPUPID_SHIFT</span></a> <span class="f">&lt;=</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_TlJfUEFHRUZMQUdTXzA_"><span class="b">NR_PAGEFLAGS</span></a>
<a name="77" /><span class="Maybe">      77:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfV0lEVEhfMA__"><span class="b">LAST_CPUPID_WIDTH</span></a> <a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfU0hJRlRfMA__"><span class="b">LAST_CPUPID_SHIFT</span></a>
<a name="78" /><span class="False">      78:</span> <span class="f">#</span><span class="n">else</span>
<a name="79" /><span class="False">      79:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfV0lEVEhfMA__"><span class="b">LAST_CPUPID_WIDTH</span></a> <span class="c">0</span>
<a name="80" /><span class="Maybe">      80:</span> <span class="f">#</span><span class="n">endif</span>
<a name="81" /><span class="Maybe">      81:</span> 
<a name="82" /><span class="Maybe">      82:</span> <span class="k">/*</span>
<a name="83" /><span class="Maybe">      83:</span> <span class="k"> * We are going to use the flags for the page to node mapping if its in</span>
<a name="84" /><span class="Maybe">      84:</span> <span class="k"> * there.  This includes the case where there is no node, so it is implicit.</span>
<a name="85" /><span class="Maybe">      85:</span> <span class="k"> */</span>
<a name="86" /><span class="Maybe">      86:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Tk9ERVNfV0lEVEhfMA__"><span class="b">NODES_WIDTH</span></a> <span class="f">&gt;</span> <span class="c">0</span> <span class="f">||</span> <a href="cpu.c_macros_ref.html#_Tk9ERVNfU0hJRlRfMA__"><span class="b">NODES_SHIFT</span></a> <span class="f">==</span> <span class="c">0</span><span class="f">)</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Tk9ERV9OT1RfSU5fUEFHRV9GTEFHU18w"><span class="b">NODE_NOT_IN_PAGE_FLAGS</span></a>
<a name="88" /><span class="Maybe">      88:</span> <span class="f">#</span><span class="n">endif</span>
<a name="89" /><span class="Maybe">      89:</span> 
<a name="90" /><span class="False">      90:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_NUMA_BALANCING</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <a href="cpu.c_macros_ref.html#_TEFTVF9DUFVQSURfV0lEVEhfMA__"><span class="b">LAST_CPUPID_WIDTH</span></a> <span class="f">==</span> <span class="c">0</span>
<a name="91" /><span class="False">      91:</span> <span class="f">#</span><span class="n">define</span> <span class="b">LAST_CPUPID_NOT_IN_PAGE_FLAGS</span>
<a name="92" /><span class="Maybe">      92:</span> <span class="f">#</span><span class="n">endif</span>
<a name="93" /><span class="Maybe">      93:</span> 
<a name="94" /><span class="True">      94:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_PAGE_FLAGS_LAYOUT */</span>
<a name="95" /><span class="True">      95:</span> </pre>
  </body>
</html>
